/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.CapaFisica;
import fisica.EstudioLaboratorioFisica;
import hibernate.objeto.DeterminacionesEstudioLaboratorio;
import hibernate.objeto.EstudioLaboratorio;
import java.util.Vector;

/**
 *
 * @author Gonzalo
 */
public class EstudioLaboratorioLogica extends CapaLogica {

    /**
     * Agrega el objeto EstudioLaboratorio en la base de datos.
     *
     * @param datosDeterminacionesEstudioLaboratorio Los datos del estudio laboratorio a agregar
     * @param estudioLaboratorio El objeto EstudioLaboratorio a
     * agregar
     * @param idEstudioLaboratorio El id del objeto
     * creado para su posterior recuperación
     *
     * @return true si se agregó correctamente, false en caso contrario
     */
    public static boolean agregarEstudioLaboratorio(
            Object[] datosGeneralLaboratorio,
            Object[][] datosDeterminacionesEstudioLaboratorio,
            EstudioLaboratorio estudioLaboratorio
            , int[] idEstudioLaboratorio) {

        int cantidadObjetosDeterminacionesACrear =
                datosDeterminacionesEstudioLaboratorio.length;

        estudioLaboratorio =
                crearObjetoEstudioLaboratorio(datosGeneralLaboratorio,
                estudioLaboratorio);

        //Persiste el objeto
        if (CapaFisica.guardarOActualizarObjeto(estudioLaboratorio)) {
            idEstudioLaboratorio[0] = estudioLaboratorio
                    .getIdEstudioLaboratorio();
            for (int i = 0; i < cantidadObjetosDeterminacionesACrear; i++) {
                //Vinculo el objeto
                DeterminacionesEstudioLaboratorioLogica.
                        agregarDeterminacionesEstudioLaboratorio(
                        datosDeterminacionesEstudioLaboratorio[i],
                        estudioLaboratorio);
            }
            return true;
        } else {
            return false;
        }

    }

    /**
     * Crea un objeto EstudioLaboratorio y si ya existe lo obtiene de la
     * base de datos.
     *
     * @param datoEstudioLaboratorio Los datos del estudio laboratorio a agregar
     * @param estudioLaboratorio El objeto EstudioLaboratorio a
     * agregar
     * @return El objeto creado u obtenido
     */
    private static EstudioLaboratorio
             crearObjetoEstudioLaboratorio(Object[] datoEstudioLaboratorio,
             EstudioLaboratorio estudioLaboratorio) {

        estudioLaboratorio.setBioquimicoEstudioLaboratorio(
                datoEstudioLaboratorio[CapaLogica.ESTUDIO_LABORATORIO_BIOQUIMICO].
                toString());
        estudioLaboratorio.setProtocoloEstudioLaboratorio(
                datoEstudioLaboratorio[CapaLogica.ESTUDIO_LABORATORIO_PROTOCOLO].
                toString());
        estudioLaboratorio.setComentariosEstudioLaboratorio(
                datoEstudioLaboratorio[CapaLogica.ESTUDIO_LABORATORIO_COMENTARIOS].
                toString());
        
        return estudioLaboratorio;
    }


    /**
     * Retorna el objeto EstudioLaboratorioLogica según el id.
     *
     * @param idEstudioLaboratorio  El id de la
     * Ecg
     * @return El objeto EstudioLaboratorioLogica consultado, null si no existe
     */
    public static EstudioLaboratorio
            getEstudioLaboratorioPorId(
            int idEstudioLaboratorio) {
        return EstudioLaboratorioFisica.
                getEstudioLaboratorioPorId(idEstudioLaboratorio);
    }

    /**
     * Retorna todo el objeto EstudioLaboratorio en string.
     *
     * @param estudioLaboratorio El objeto a escribir
     */
    public static String getEstudioLaboratorioString(EstudioLaboratorio estudioLaboratorio) {
        String estudioLaboratorioString =
                "idEstudioLaboratorio: " +
                estudioLaboratorio.getIdEstudioLaboratorio() + "\n" +
                "bioquimicoEstudioLaboratorio: " +
                estudioLaboratorio.getBioquimicoEstudioLaboratorio() + "\n" +
                "protocoloEstudioLaboratorio: " +
                estudioLaboratorio.getProtocoloEstudioLaboratorio() + "\n" +
                "comentariosEstudioLaboratorio: " +
                estudioLaboratorio.getComentariosEstudioLaboratorio() + "\n";

        Vector<DeterminacionesEstudioLaboratorio>
                vectorDeterminacionesEstudioLaboratorio =
                DeterminacionesEstudioLaboratorioLogica.
                getVectorDeterminacionesEstudioLaboratorioPorIdEstudioLaboratorio(
                estudioLaboratorio.getIdEstudioLaboratorio());

                for (int i = 0; i < vectorDeterminacionesEstudioLaboratorio.size(); i++) {
            estudioLaboratorioString += DeterminacionesEstudioLaboratorioLogica.
                    getDeterminacionesEstudioLaboratorioString(
                    vectorDeterminacionesEstudioLaboratorio.get(i));
        }

        return estudioLaboratorioString;
    }

    /**
     * Retorna todo el objeto EstudioLaboratorio en HTML.
     *
     * @param estudioLaboratorio El objeto a escribir
     */
    public static String getEstudioLaboratorioHTML(EstudioLaboratorio estudioLaboratorio) {

        String estudioLaboratorioHTML = "";

        if (estudioLaboratorio != null) {

        //Determinaciones
             Vector<DeterminacionesEstudioLaboratorio>
                vectorDeterminacionesEstudioLaboratorio =
                DeterminacionesEstudioLaboratorioLogica.
                getVectorDeterminacionesEstudioLaboratorioPorIdEstudioLaboratorio(
                estudioLaboratorio.getIdEstudioLaboratorio());

             String determinacionesHTML = "";

                for (int i = 0; i < vectorDeterminacionesEstudioLaboratorio.size(); i++) {
                    determinacionesHTML += "</font><br><br>";

                    determinacionesHTML += DeterminacionesEstudioLaboratorioLogica.
                            getDeterminacionesEstudioLaboratorioHTML(
                            vectorDeterminacionesEstudioLaboratorio.get(i));
        }

        estudioLaboratorioHTML =
                    "<font size=\"3\" face=\"arial\" color=\"blue\">"
                    + "ESTUDIO LABORATORIO</font><br><br><hr /><br>" +
                "<font size=\"3\" face=\"arial\" color=\"blue\">Bioquímico: </font><br>"
                    + "<font size=\"3\" face=\"arial\">" +
                estudioLaboratorio.getBioquimicoEstudioLaboratorio() + "</font><br><br>"
                + "<font size=\"3\" face=\"arial\" color=\"blue\">Protocolo: </font><br>"
                    + "<font size=\"3\" face=\"arial\">" +
                estudioLaboratorio.getProtocoloEstudioLaboratorio() + "</font><br><br>"
                + "<font size=\"3\" face=\"arial\" color=\"blue\">Comentarios: </font><br>"
                    + "<font size=\"3\" face=\"arial\">" +
                estudioLaboratorio.getComentariosEstudioLaboratorio() +
                determinacionesHTML + "</font><br><br>";

        } else {
            estudioLaboratorioHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">ESTUDIO LABORATORIO</font><br><br> " +
                    "<hr /><font size=\"3\" face=\"arial\">No posee</font><br></font><hr />";
        }
        return estudioLaboratorioHTML;
    }
}
